﻿// <copyright file="IPaginatedDto.cs" company="DatamineConsulting">
//      Copyright (c) DatamineConsulting.  All rights reserved.
// </copyright>
// <author>Sites, Ryan</author>
namespace Kanz4Kidz.DataTransfer.Interface
{
    using System.Collections.Generic;

    /// <summary>
    /// An interface that describes a paginated data transfer object.
    /// </summary>
    /// <typeparam name="TDto">The type of the data transfer object.</typeparam>
    public interface IPaginatedDto<out TDto> where TDto : IDto
    {
        /// <summary>
        /// Gets or sets the index of the page.
        /// </summary>
        /// <value>
        /// The index of the page.
        /// </value>
        int PageIndex { get; set; }

        /// <summary>
        /// Gets or sets the size of the page.
        /// </summary>
        /// <value>
        /// The size of the page.
        /// </value>
        int PageSize { get; set; }

        /// <summary>
        /// Gets or sets the total count.
        /// </summary>
        /// <value>
        /// The total count.
        /// </value>
        int TotalCount { get; set; }

        /// <summary>
        /// Gets or sets the total page count.
        /// </summary>
        /// <value>
        /// The total page count.
        /// </value>
        int TotalPageCount { get; set; }

        /// <summary>
        /// Gets or sets a value indicating whether this instance has next page.
        /// </summary>
        /// <value>
        /// 	<c>true</c> if this instance has next page; otherwise, <c>false</c>.
        /// </value>
        bool HasNextPage { get; set; }

        /// <summary>
        /// Gets or sets a value indicating whether this instance has previous page.
        /// </summary>
        /// <value>
        /// 	<c>true</c> if this instance has previous page; otherwise, <c>false</c>.
        /// </value>
        bool HasPreviousPage { get; set; }

        /// <summary>
        /// Gets the items.
        /// </summary>
        IEnumerable<TDto> Items { get; }
    }
}
